[FMX] Un dialogue d'ouverture de fichier "stylisé" - partie arborescence

La création d’un dialogue de fichiers optimisé avec TTreeView en Firemonkey

Un développeur a récemment partagé son expérience dans la création d’un dialogue de fichiers utilisant le composant TTreeView de Firemonkey, soulignant des différences significatives par rapport à VCL. Ce projet a pour objectif d’optimiser le chargement des répertoires dans l’interface.

Pour améliorer la performance, l’auteur propose de ne pas charger tous les répertoires d’un coup, mais plutôt de se concentrer sur les répertoires enfants. Cette méthode utilise un élément « fantôme » pour indiquer la présence de sous-dossiers, ce qui permet une gestion plus fluide des ressources.

Code Delphi

Le code présenté permet d’ajouter des répertoires à un nœud parent dans l’arborescence. Il vérifie d’abord si le répertoire existe, puis crée un nouvel élément dans le TTreeView pour chaque sous-répertoire détecté. En cas de répertoire contenant d’autres sous-répertoires, un nœud fantôme est créé pour signaler cette possibilité.

delphi
procedure TForm1.AddDirectories(ParentNode: TTreeviewItem; const Path: string);
var
SubDirs: TStringDynArray;
SubDir: string;
NewNode: TTreeviewItem;
HasChildren: Boolean;
begin
if DirectoryExists(Path) then
begin
NewNode := nil;
SubDirs := TDirectory.GetDirectories(Path, ‘.‘, TSearchOption.soTopDirectoryOnly);
if SizeOf(SubDirs) > 0 then
begin
for SubDir in SubDirs do
begin
if not DirectoryExists(SubDir) then continue;
try
HasChildren := Length(TDirectory.GetDirectories(SubDir)) > 0;
NewNode := TTreeViewItem.Create(ParentNode);
NewNode.Parent := ParentNode;
NewNode.Text := TPath.GetFileName(SubDir);
NewNode.ImageIndex := 0;
NewNode.TagString := StrNew(PChar(SubDir));
NewNode.OnClick := TreeViewItemClick;
except
HasChildren := False;
end;

    if HasChildren then
      NoeudFantome(NewNode);
  end;
end;

end;
end;

Problèmes rencontrés

L’auteur a noté l’absence de certains événements, tels que OnExpanding, dans TTreeView de Firemonkey. De plus, l’utilisation de l’extenseur rendait l’événement TreeViewItem.OnClick inopérant. Il a donc expérimenté avec le surclassement de TTreeViewItem et des modifications de style pour désactiver les boutons d’extension.

Conclusion

Le projet a abouti à un dialogue de fichiers fonctionnel, permettant une navigation efficace dans les répertoires. Les prochaines étapes incluront le traitement de la liste à droite du dialogue, avec l’utilisation de TListBox.

Source : Développez.net

Source
Partager ici :
Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire